const { ipcRenderer: ipc } = window.require && window.require('electron') || {}
import { VueConstructor } from 'vue'

/**
 * 异步调用主函数
 * @param ipc
 * @param channel
 * @param param
 * @returns {Promise<unknown>}
 */
const callMain = (ipc: any, channel: string, ...param: any) => {
  return new Promise((resolve) => {
    // 声明渲染进程函数, 用于主进程函数回调, 返回数据
    console.log(...param);
    // 调用主进程函数
    ipc.on(channel, (event: any, result: any) => {
      console.log('[ipcRenderer] [callMain] result:', result)
      resolve(result)
    })
    ipc.send(channel, ...param)
  })
}

export default {
  install(Vue: VueConstructor) {
    if(ipc){
      Vue.prototype.$ipc = ipc // 全局注入ipc
      Vue.prototype.$ipcCallMain = (channel: string, ...param: any) => callMain(ipc, channel, ...param) // 全局注入调用主进程函数的方法
    }
  }
}